package es.ojugames.myplaces;

import java.util.List;

import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;

import es.ojugames.myplaces.database.ConstantsDB;
import es.ojugames.myplaces.location.MyItemizedOverlayExtended;

public class MapaLugaresActivity extends MapActivity{
	private MapView mapa;
	private MapController mapController;
	private Drawable marker;
	private List<Overlay> mapOverlays;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		//Eliminamos la barra de titulo
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		
		//Activamos el modo fullscreen
		this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
		
		//Cargamos el layout
		setContentView(R.layout.mostrar_ubicacion);
		
		//recuperamos la vista del mapa
		mapa = (MapView) this.findViewById(R.id.mapa);
		
		//Obtenemos el controlador del mapa
		mapController = mapa.getController();
		
		//Obtenemos la ultima posicion conocida por el Proveedor de Red
		LocationManager locManager = (LocationManager) getSystemService(LOCATION_SERVICE);
		Location ultimaConocida = locManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
		
		Double longitudConocida = ultimaConocida.getLongitude() * 1E6;
		Double latitudConocida = ultimaConocida.getLatitude() * 1E6;
		
		//Creamos un objeto GeoPoint que es el que usa el Controlador
		GeoPoint ultimaConocidaGeo = new GeoPoint(latitudConocida.intValue(), longitudConocida.intValue());
		
		//Movemos el mapa hasta la ultima posicion conocida, fijamos el zoom y activamos la vista satelite
		mapController.setCenter(ultimaConocidaGeo);
		mapController.setZoom(18);
		mapa.setSatellite(true);
		
		//Cargamos el recurso que utilizaremos de marca
		marker = this.getResources().getDrawable(R.drawable.marker);
		
		//Obtenemos la lista de capas sobre el mapa
		mapOverlays = mapa.getOverlays();
		
	}

	//Metodo que se encarga de consultar en base de datos los lugares
	//y dibujarlos en el mapa
	public void loadPlaces() {
		//Obtenemos la informacion de la BD
		
		//Uri de la tabla a consultar
		Uri uri = Uri.parse("content://es.ojugames.myplaces/places");
		//Obtenemos el cursor que nos permitira recorrer la lista de lugares
		Cursor cursor = getContentResolver().query(uri, null, null, null, null);
		
		Double latitud, longitud;
		String nombre;
		Integer id;
		
		mapOverlays.clear();
		
		if (cursor.getCount() > 0) {
			cursor.moveToFirst();
			
			//Creamos una capa donde dibujaremos nuestras marcas
			MyItemizedOverlayExtended itemizedoverlay = new MyItemizedOverlayExtended(this, marker);
			
			//Añadimos marcas para todos los puntos almacenados
			do {
				latitud = cursor.getDouble(cursor.getColumnIndex(ConstantsDB.Places.LATITUD));
				longitud = cursor.getDouble(cursor.getColumnIndex(ConstantsDB.Places.LONGITUD));
				nombre = cursor.getString(cursor.getColumnIndex(ConstantsDB.Places.NOMBRE));
				id = cursor.getInt(cursor.getColumnIndex(ConstantsDB.Places._ID));
				
				GeoPoint localizacion = new GeoPoint(latitud.intValue(), longitud.intValue());
				
				itemizedoverlay.addPoint(localizacion, nombre, id.toString());
				
			} while (cursor.moveToNext());
			
			//antes de añadir la capa limpiamos para no ir acumulando
			mapOverlays.add(itemizedoverlay);
		} 
		
		if (mapOverlays.size() == 0) {
			MyItemizedOverlayExtended itemizedoverlay = new MyItemizedOverlayExtended(this, marker);
			mapOverlays.add(itemizedoverlay);
		}
	}

	@Override
	protected boolean isRouteDisplayed() {
		return false;
	}
	
	//Al volver recargamos por si ha habido cambios de posicion o
	//se han eliminado lugares
	@Override
	protected void onResume() {
		super.onResume();
		loadPlaces();
	}
	
}
